home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / TreeView.h < prev    next >
C/C++ Source or Header  |  1990-12-05  |  3KB  |  139 lines

  1. #ifndef TreeView_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define TreeView_First
  6.  
  7. #include "Dialog.h"
  8.  
  9. enum TreeLayout {
  10.     eTLIndented,
  11.     eTLTopDown,
  12.     eTLLeftRight
  13. };
  14.  
  15. enum TreeConnection {
  16.     eTCNone,
  17.     eTCDiagonal,
  18.     eTCPerpendicular,
  19.     eTCDiagonal2
  20. };
  21.  
  22. //---- TreeView ----------------------------------------------------------------
  23.  
  24. class TreeView: public DialogView {
  25. public:
  26.     Point gap;
  27.     TreeLayout layout;
  28.     TreeConnection connType;
  29.     class TreeNode *tree, *oldtree;
  30.     VObject *selection;
  31. public:
  32.     MetaDef(TreeView);
  33.  
  34.     TreeView(EvtHandler*, TreeLayout lt= eTLLeftRight, 
  35.                     TreeConnection ct= eTCPerpendicular);
  36.  
  37.     VObject *DoCreateDialog();
  38.     void SetTree(TreeNode*, bool freeold= TRUE);
  39.     void Promote(TreeNode*);
  40.     void Collapse(TreeNode*);
  41.     virtual void OpenTreeNode(TreeNode*, bool);
  42.     VObject *FindNode(VObject *);
  43.     TreeNode *GetTree()
  44.     { return tree; }
  45.  
  46.     //---- layout
  47.     void SetLayout(TreeLayout);
  48.     void SetConnType(TreeConnection);
  49.  
  50.     //---- event handling
  51.     virtual Command *NodeSelected(VObject*, int cl);
  52.     virtual Command *GetNodeSelector(TreeNode *tn, int cl);
  53.  
  54.     //---- input/output
  55.     ostream &PrintOn(ostream&);
  56.     istream &ReadFrom(istream&);
  57.     void Export(ostream&);
  58.     
  59.     //---- hooks for BuildTree
  60.     void InstallTree(Object *root);
  61.     VObject *BuildTree(Object *root);
  62.     virtual VObject *NodeAsVObject(Object *);
  63.     virtual Iterator *MakeChildrenIter(Object *);
  64.  
  65.     //---- selection
  66.     void SetSelection(VObject *gp);
  67.     VObject *GetSelection()
  68.     { return selection; }
  69. };
  70.  
  71. //---- TreeNode ------------------------------------------------------------------
  72.  
  73. enum TreeNodeFlags {
  74.     eTreeNodeCollapsed  =   BIT(eCompVObjLast+1),
  75.     eTreeNodeDefault    =   eCompVObjDefault,
  76.     eTreeNodeLast       =   eCompVObjLast+1
  77. };
  78.  
  79. class TreeNode: public CompositeVObject {
  80.     TreeView *treeview;
  81. public:
  82.     MetaDef(TreeNode);
  83.  
  84.     TreeNode(int id= cIdNone, Collection *cp= 0);
  85.     TreeNode(int id, ...);
  86.     TreeNode(int id, va_list ap);
  87.  
  88.     void SetContainer(VObject*);
  89.     TreeView *GetTreeView()
  90.     { return treeview; }
  91.     bool Collapsed()
  92.     { return TestFlag(eTreeNodeCollapsed); }
  93.     void Open(bool);
  94.     void Collapse();
  95.     TreeConnection ConnType()
  96.     { return treeview->connType; }
  97.     TreeLayout Layout()
  98.     { return treeview->layout; }
  99.     Point Gap()
  100.     { return treeview->gap; }
  101.     VObject *Detect(BoolFun f, void *arg);
  102.     VObject *FindExpandedItem(VObject*);
  103.  
  104.     //---- layout
  105.     void SetOrigin(Point at);
  106.     Metric GetMinSize();
  107.     int Base();
  108.  
  109.     //---- drawing
  110.     void Draw(Rectangle);
  111.     void DrawConnections();
  112.     void Outline2(Point, Point);
  113.     void Highlight(HighlightState hst);
  114.     GrCursor GetCursor(Point lp);
  115.  
  116.     //---- event handling
  117.     Command *DispatchEvents(Point, Token, Clipper*);
  118.     Command *DoMiddleButtonDownCommand(Point lp, Token t, int cl);
  119.     Command *DoLeftButtonDownCommand(Point lp, Token t, int cl);
  120.  
  121.     //---- input/output
  122.     void Export(ostream &s, int level);
  123. };
  124.  
  125. //---- TreeNodeSelector -------------------------------------------------------------
  126.  
  127. class TreeNodeSelector: public Command {
  128.     TreeNode *item;
  129.     bool inside, lastinside;
  130.     int clicks;
  131. public:
  132.     TreeNodeSelector(TreeNode *s, int cl);
  133.     void TrackFeedback(Point, Point, bool);
  134.     Command *TrackMouse(TrackPhase, Point, Point, Point);
  135. };
  136.  
  137. #endif TreeView_First
  138.  
  139.